import {
  BasicColumn
} from '/@/components/Table';
import {
  FormSchema
} from '/@/components/Table';
import {
  getAllRolesList,
  getAllTenantList
} from './user.api';
import {
  rules
} from '/@/utils/helper/validator';
import {
  render
} from '/@/utils/common/renderUtils';
export const columns: BasicColumn[] = [{
    title: '账号',
    dataIndex: 'username',
    width: 120,
  },
  {
    title: '姓名',
    dataIndex: 'realname',
    width: 100,
  },
  {
    title: '角色',
    dataIndex: 'roleTxt',
    width: 150,
  },
  {
    title: '头像',
    dataIndex: 'avatar',
    width: 120,
    customRender: render.renderAvatar,
  },
  {
    title: '性别',
    dataIndex: 'sex',
    width: 80,
    sorter: true,
    customRender: ({
      text
    }) => {
      return render.renderDict(text, 'sex');
    },
  },
  {
    title: '生日',
    dataIndex: 'birthday',
    width: 120,
  },
  {
    title: '手机号码',
    dataIndex: 'phone',
    width: 140,
  },
  {
    title: '部门',
    dataIndex: 'orgCodeTxt',
  },
  // {
  //   title: '负责部门',
  //   width: 150,
  //   dataIndex: 'departIds_dictText',
  // },
  {
    title: '状态',
    dataIndex: 'status',
    width: 80,
    customRender: ({
      text
    }) => {
      return text == 1 ? '正常' : text == 2 ? '冻结' : '';
    },
  },
];

export const recycleColumns: BasicColumn[] = [{
    title: '账号',
    dataIndex: 'username',
    width: 100,
  },
  {
    title: '姓名',
    dataIndex: 'realname',
    width: 100,
  },
  {
    title: '头像',
    dataIndex: 'avatar',
    width: 80,
    customRender: render.renderAvatar,
  },
  {
    title: '性别',
    dataIndex: 'sex',
    width: 80,
    sorter: true,
    customRender: ({
      text
    }) => {
      return render.renderDict(text, 'sex');
    },
  },
];

export const searchFormSchema: FormSchema[] = [{
    label: '账号',
    field: 'username',
    component: 'JInput',
    colProps: {
      span: 6
    },
  },
  {
    label: '姓名',
    field: 'realname',
    component: 'JInput',
    colProps: {
      span: 6
    },
  },
  {
    label: '性别',
    field: 'sex',
    component: 'JDictSelectTag',
    componentProps: {
      dictCode: 'sex',
      placeholder: '请选择性别',
      stringToNumber: true,
    },
    colProps: {
      span: 6
    },
  },
  {
    label: '手机号码',
    field: 'phone',
    component: 'Input',
    colProps: {
      span: 6
    },
  },
  {
    label: '状态',
    field: 'status',
    component: 'JDictSelectTag',
    componentProps: {
      dictCode: 'user_status',
      placeholder: '请选择状态',
      stringToNumber: true,
    },
    colProps: {
      span: 6
    },
  },
];

export const formSchema: FormSchema[] = [{
    label: '',
    field: 'id',
    component: 'Input',
    show: false,
  },
  {
    label: '账号',
    field: 'username',
    component: 'Input',
    dynamicDisabled: ({
      values
    }) => {
      return !!values.id;
    },
    //dynamicRules: ({ model, schema }) => rules.duplicateCheckRule('sys_user', 'username', model, schema, true),
    dynamicRules: () => {
      return [{
        required: true,
        message: '请输入账号!'
      }, ];
    },
  },
  {
    label: '登录密码',
    field: 'password',
    component: 'StrengthMeter',
    rules: [{
      required: true,
      message: '请输入登录密码',
    }, ],
  },
  {
    label: '确认密码',
    field: 'confirmPassword',
    component: 'InputPassword',
    dynamicRules: ({
      values
    }) => rules.confirmPassword(values, true),
  },
  {
    label: '姓名',
    field: 'realname',
    required: true,
    component: 'Input',
  },
  {
    label: '工号',
    field: 'workNo',
    required: true,
    component: 'Input',
    dynamicRules: ({
      model,
      schema
    }) => {
      return [{
        required: true,
        message: '请输入工号!'
      }];
    }
  },
  {
    label: '职务',
    field: 'post',
    required: false,
    component: 'JSelectPosition',
    componentProps: {
      rowKey: 'code',
      labelKey: 'name',
    },
  },
  {
    label: '角色',
    field: 'selectedroles',
    component: 'ApiSelect',
    componentProps: {
      mode: 'multiple',
      api: getAllRolesList,
      labelField: 'roleName',
      valueField: 'id',
    },
  },
  {
    label: '所属部门',
    field: 'selecteddeparts',
    component: 'JSelectDept',
    componentProps: ({
      formActionType,
      formModel
    }) => {
      return {
        sync: false,
        multiple: false,
        showButton:false,
        checkable:false,
        checkStrictly: true,
        defaultExpandLevel: 2,
        onSelect: (options, values) => {
          const {
            updateSchema
          } = formActionType;
          //所属部门修改后更新负责部门下拉框数据
          updateSchema([{
            field: 'departIds',
            componentProps: {
              options
            },
          }, ]);
          //所属部门修改后更新负责部门数据
          formModel.departIds && (formModel.departIds = formModel.departIds.filter((item) =>
            values.value.indexOf(item) > -1));
        },
      };
    },
  },
  // {
  //   label: '租户',
  //   field: 'relTenantIds',
  //   component: 'ApiSelect',
  //   componentProps: {
  //     mode: 'multiple',
  //     api: getAllTenantList,
  //     numberToString: true,
  //     labelField: 'name',
  //     valueField: 'id',
  //   },
  // },
  {
    label: '业务组织id',
    field: 'selectedOrganizations',
    component: 'Input',
    show: false
  },
  //organizationName
  {
    label: '业务组织',
    field: 'organizationName',
    component: 'Input',
    slot: 'organizationSlot',
    dynamicRules: () => {
      return [{
        required: true,
        message: '请输入业务组织!'
      }, ];
    },
  },
  {
    label: '身份',
    field: 'userIdentity',
    component: 'RadioGroup',
    defaultValue: 1,
    componentProps: ({
      formModel
    }) => {
      return {
        options: [{
            label: '普通',
            value: 1,
            key: '1'
          },
          {
            label: '上级',
            value: 2,
            key: '2'
          },
        ],
        onChange: () => {
          formModel.userIdentity == 1 && (formModel.departIds = []);
        },
      };
    },
  },
  {
    label: '负责部门',
    field: 'departIds',
    component: 'Select',
    componentProps: {
      mode: 'multiple',
    },
    ifShow: ({
      values
    }) => values.userIdentity == 2,
  },
  {
    label: '头像',
    field: 'avatar',
    component: 'JImageUpload',
    componentProps: {
      fileMax: 1,
    },
  },
  {
    label: '生日',
    field: 'birthday',
    component: 'DatePicker',
  },
  {
    label: '性别',
    field: 'sex',
    component: 'JDictSelectTag',
    componentProps: {
      dictCode: 'sex',
      placeholder: '请选择性别',
      stringToNumber: true,
    },
  },
  {
    label: '邮箱',
    field: 'email',
    component: 'Input',
    rules: rules.rule('email', false),
  },
  {
    label: '手机号码',
    field: 'phone',
    component: 'Input',
    dynamicRules: ({
      model,
      schema
    }) => {
      return [{
          ...rules.duplicateCheckRule('sys_user', 'phone', model, schema, true)[0]
        },
        {
          pattern: /^1[3|4|5|7|8|9][0-9]\d{8}$/,
          message: '手机号码格式有误'
        },
      ];
    },
  },
  {
    label: '座机',
    field: 'telephone',
    component: 'Input',
    rules: [{
      pattern: /^0\d{2,3}-[1-9]\d{6,7}$/,
      message: '请输入正确的座机号码'
    }],
  },
  {
    label: '是否同步',
    field: 'activitiSync',
    defaultValue: 1,
    component: 'JDictSelectTag',
    componentProps: {
      dictCode: 'activiti_sync',
      type: 'radio',
      stringToNumber: true,
    },
  },
];

export const formPasswordSchema: FormSchema[] = [{
    label: '账号',
    field: 'username',
    component: 'Input',
    componentProps: {
      readOnly: true
    },
  },
  {
    label: '登录密码',
    field: 'password',
    component: 'StrengthMeter',
    componentProps: {
      placeholder: '请输入登录密码',
    },
    rules: [{
      required: true,
      message: '请输入登录密码',
    }, ],
  },
  {
    label: '确认密码',
    field: 'confirmPassword',
    component: 'InputPassword',
    dynamicRules: ({
      values
    }) => rules.confirmPassword(values, true),
  },
];

export const formAgentSchema: FormSchema[] = [{
    label: '',
    field: 'id',
    component: 'Input',
    show: false,
  },
  {
    field: 'userName',
    label: '姓名',
    component: 'Input',
    componentProps: {
      readOnly: true,
      allowClear: false,
    },
  },
  {
    field: 'agentUserName',
    label: '代理人名',
    required: true,
    component: 'JSelectUser',
    componentProps: {
      rowKey: 'username',
      labelKey: 'realname',
      maxSelectCount: 10,
      showButton: false
    },
  },
  {
    field: 'startTime',
    label: '代理开始时间',
    component: 'DatePicker',
    required: true,
    componentProps: {
      showTime: true,
      valueFormat: 'YYYY-MM-DD HH:mm:ss',
      placeholder: '请选择代理开始时间',
    },
  },
  {
    field: 'endTime',
    label: '代理结束时间',
    component: 'DatePicker',
    required: true,
    componentProps: {
      showTime: true,
      valueFormat: 'YYYY-MM-DD HH:mm:ss',
      placeholder: '请选择代理结束时间',
    },
  },
  {
    field: 'status',
    label: '状态',
    component: 'JDictSelectTag',
    defaultValue: '1',
    componentProps: {
      dictCode: 'valid_status',
      type: 'radioButton',
    },
  },
];
